package com.warm.orm.eq.sys.agent;

import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.StrUtil;
import com.easy.query.api.proxy.client.EasyEntityQuery;
import com.easy.query.api.proxy.entity.select.EntityQueryable;
import com.easy.query.core.api.pagination.EasyPageResult;
import com.easy.query.solon.annotation.Db;
import com.warm.core.page.TableDataInfo;
import com.warm.orm.domain.sys.SysLogininfor;
import com.warm.orm.domain.sys.proxy.SysLogininforProxy;
import com.warm.orm.utils.DateParaUtils;
import com.warm.orm.utils.PageUtils;
import com.warm.system.api.orm.agent.SysLogininforAgent;
import org.noear.solon.annotation.Component;

import java.util.List;

/**
 * 系统访问日志情况信息 数据层 orm代理类
 *
 * @author warm
 */
@Component
public class SysLogininforAgentImpl implements SysLogininforAgent {

    @Db
    private EasyEntityQuery easyEntityQuery;

    private EntityQueryable<SysLogininforProxy, SysLogininfor> buildQuery(SysLogininfor bean) {
        return this.easyEntityQuery
                .queryable(SysLogininfor.class)
                .where(t -> {
                    t.ipaddr().like(StrUtil.isNotBlank(bean.getIpaddr()), bean.getIpaddr());
                    t.status().eq(StrUtil.isNotBlank(bean.getStatus()), bean.getStatus());
                    t.userName().like(StrUtil.isNotBlank(bean.getUserName()), bean.getUserName());
                    t.loginTime().rangeClosed(
                            ObjUtil.isNotNull(bean.getParams().get("beginTime")),
                            DateParaUtils.getStartDate(bean),
                            ObjUtil.isNotNull(bean.getParams().get("endTime")),
                            DateParaUtils.getEndDate(bean)
                    );
                });
    }

    /**
     * 清空系统登录日志
     *
     * @return 结果
     */
    @Override
    public int cleanLogininfor() {
        return (int) this.easyEntityQuery.deletable(SysLogininfor.class).allowDeleteStatement(true).executeRows();
    }

    /**
     * 批量删除系统登录日志
     *
     * @param infoIds 需要删除的登录日志ID
     * @return 结果
     */
    @Override
    public int deleteLogininforByIds(Long[] infoIds) {
        return (int) this.easyEntityQuery
                .deletable(SysLogininfor.class)
                .where(t -> t.infoId().in(infoIds))
                .executeRows();
    }

    /**
     * 新增系统登录日志
     *
     * @param logininfor 访问日志对象
     */
    @Override
    public void insertLogininfor(SysLogininfor logininfor) {
        this.easyEntityQuery.insertable(logininfor).executeRows();
    }

    /**
     * 查询系统登录日志集合
     *
     * @param logininfor 访问日志对象
     * @return 登录记录集合
     */
    @Override
    public List<SysLogininfor> selectLogininforList(SysLogininfor logininfor) {
        return this.buildQuery(logininfor).toList();
    }

    /**
     * 查询系统登录日志集合
     *
     * @param logininfor 访问日志对象
     * @return 登录记录集合
     */
    @Override
    public TableDataInfo<SysLogininfor> selectLogininforPage(SysLogininfor logininfor) {
        PageUtils.startPage();
        EasyPageResult<SysLogininfor> pageResult = this.buildQuery(logininfor)
                .toPageResult(PageUtils.getLocalPage().getPageNum(), PageUtils.getLocalPage().getPageSize());
        return new TableDataInfo(pageResult.getData(), (int) pageResult.getTotal());
    }
}
